home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.4)
-
- import ImpactPacket
-
- class Decoder:
-
- def decode(self, aBuffer):
- pass
-
-
-
- class EthDecoder(Decoder):
-
- def __init__(self):
- pass
-
-
- def decode(self, aBuffer):
- e = ImpactPacket.Ethernet(aBuffer)
- off = e.get_header_size()
- if e.get_ether_type() == ImpactPacket.IP.ethertype:
- self.ip_decoder = IPDecoder()
- packet = self.ip_decoder.decode(aBuffer[off:])
- elif e.get_ether_type() == ImpactPacket.ARP.ethertype:
- self.arp_decoder = ARPDecoder()
- packet = self.arp_decoder.decode(aBuffer[off:])
- else:
- self.data_decoder = DataDecoder()
- packet = self.data_decoder.decode(aBuffer[off:])
- e.contains(packet)
- return e
-
-
-
- class LinuxSLLDecoder(Decoder):
-
- def __init__(self):
- pass
-
-
- def decode(self, aBuffer):
- e = ImpactPacket.LinuxSLL(aBuffer)
- off = 16
- if e.get_ether_type() == ImpactPacket.IP.ethertype:
- self.ip_decoder = IPDecoder()
- packet = self.ip_decoder.decode(aBuffer[off:])
- elif e.get_ether_type() == ImpactPacket.ARP.ethertype:
- self.arp_decoder = ARPDecoder()
- packet = self.arp_decoder.decode(aBuffer[off:])
- else:
- self.data_decoder = DataDecoder()
- packet = self.data_decoder.decode(aBuffer[off:])
- e.contains(packet)
- return e
-
-
-
- class IPDecoder(Decoder):
-
- def __init__(self):
- pass
-
-
- def decode(self, aBuffer):
- i = ImpactPacket.IP(aBuffer)
- off = i.get_header_size()
- if i.get_ip_p() == ImpactPacket.UDP.protocol:
- self.udp_decoder = UDPDecoder()
- packet = self.udp_decoder.decode(aBuffer[off:])
- elif i.get_ip_p() == ImpactPacket.TCP.protocol:
- self.tcp_decoder = TCPDecoder()
- packet = self.tcp_decoder.decode(aBuffer[off:])
- elif i.get_ip_p() == ImpactPacket.ICMP.protocol:
- self.icmp_decoder = ICMPDecoder()
- packet = self.icmp_decoder.decode(aBuffer[off:])
- else:
- self.data_decoder = DataDecoder()
- packet = self.data_decoder.decode(aBuffer[off:])
- i.contains(packet)
- return i
-
-
-
- class ARPDecoder(Decoder):
-
- def __init__(self):
- pass
-
-
- def decode(self, aBuffer):
- arp = ImpactPacket.ARP(aBuffer)
- off = arp.get_header_size()
- self.data_decoder = DataDecoder()
- packet = self.data_decoder.decode(aBuffer[off:])
- arp.contains(packet)
- return arp
-
-
-
- class UDPDecoder(Decoder):
-
- def __init__(self):
- pass
-
-
- def decode(self, aBuffer):
- u = ImpactPacket.UDP(aBuffer)
- off = u.get_header_size()
- self.data_decoder = DataDecoder()
- packet = self.data_decoder.decode(aBuffer[off:])
- u.contains(packet)
- return u
-
-
-
- class TCPDecoder(Decoder):
-
- def __init__(self):
- pass
-
-
- def decode(self, aBuffer):
- t = ImpactPacket.TCP(aBuffer)
- off = t.get_header_size()
- self.data_decoder = DataDecoder()
- packet = self.data_decoder.decode(aBuffer[off:])
- t.contains(packet)
- return t
-
-
-
- class IPDecoderForICMP(Decoder):
- '''This class was added to parse the IP header of ICMP unreachables packets
- If you use the "standard" IPDecoder, it might crash (see bug #4870) ImpactPacket.py
- because the TCP header inside the IP header is incomplete'''
-
- def __init__(self):
- pass
-
-
- def decode(self, aBuffer):
- i = ImpactPacket.IP(aBuffer)
- off = i.get_header_size()
- if i.get_ip_p() == ImpactPacket.UDP.protocol:
- self.udp_decoder = UDPDecoder()
- packet = self.udp_decoder.decode(aBuffer[off:])
- else:
- self.data_decoder = DataDecoder()
- packet = self.data_decoder.decode(aBuffer[off:])
- i.contains(packet)
- return i
-
-
-
- class ICMPDecoder(Decoder):
-
- def __init__(self):
- pass
-
-
- def decode(self, aBuffer):
- ic = ImpactPacket.ICMP(aBuffer)
- off = ic.get_header_size()
- if ic.get_icmp_type() == ImpactPacket.ICMP.ICMP_UNREACH:
- self.ip_decoder = IPDecoderForICMP()
- packet = self.ip_decoder.decode(aBuffer[off:])
- else:
- self.data_decoder = DataDecoder()
- packet = self.data_decoder.decode(aBuffer[off:])
- ic.contains(packet)
- return ic
-
-
-
- class DataDecoder(Decoder):
-
- def decode(self, aBuffer):
- d = ImpactPacket.Data(aBuffer)
- return d
-
-
-